{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn import svm\n",
    "from skimage.feature import hog\n",
    "import scipy.io\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "from random import shuffle"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "pathname = 'hw01_data/'\n",
    "mnist = scipy.io.loadmat(pathname + 'mnist/train_hog66.mat')\n",
    "mnist_org = scipy.io.loadmat(pathname + 'mnist/train_new.mat')\n",
    "mnist['trainX'] = np.concatenate((mnist['trainX'][:, :-1], mnist_org['trainX']), axis=1)\n",
    "mnist['validationX'] = np.concatenate((mnist['validationX'][:, :-1], mnist_org['validationX']), axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1e-06 :  0.9788\n",
      "1e-05 :  0.9859\n",
      "0.0001 :  0.9876\n",
      "0.001 :  0.9861\n",
      "0.01 :  0.9877\n",
      "0.1 :  0.9867\n",
      "1 :  0.987\n",
      "10 :  0.9864\n",
      "[0.98504000000000003, 0.99219999999999997, 0.99495999999999996, 0.99275999999999998, 0.99414000000000002, 0.99421999999999999, 0.99365999999999999, 0.99450000000000005]\n",
      "[0.9788, 0.9859, 0.98760000000000003, 0.98609999999999998, 0.98770000000000002, 0.98670000000000002, 0.98699999999999999, 0.98640000000000005]\n",
      "0.01 :  0.9877\n"
     ]
    }
   ],
   "source": [
    "all_training_accuracy = []\n",
    "all_validation_accuracy = []\n",
    "size = 10000\n",
    "all_C = [1e-6, 1e-5, 1e-4, 1e-3, 1e-2, 1e-1, 1, 10]\n",
    "# all_C = range(40, 41)\n",
    "\n",
    "validation_data = mnist['validationX'][:, :-1]\n",
    "validation_labels = mnist['validationX'][:, -1:].ravel()\n",
    "training_data = mnist['trainX'][:size, :-1]\n",
    "training_labels = mnist['trainX'][:size, -1:].ravel()\n",
    "for C in all_C:\n",
    "\tclf = svm.LinearSVC(C=C) # try linear or non-linear kernels\n",
    "\tclf.fit(training_data, training_labels)\n",
    "\ttraining_accuracy = clf.score(training_data, training_labels)\n",
    "\tvalidation_accuracy = clf.score(validation_data, validation_labels)\n",
    "\tall_training_accuracy.append(training_accuracy)\n",
    "\tall_validation_accuracy.append(validation_accuracy)\n",
    "\tprint(C, \": \", validation_accuracy)\n",
    "print(all_training_accuracy)\n",
    "print(all_validation_accuracy)\n",
    "\n",
    "max_idx = all_validation_accuracy.index(max(all_validation_accuracy))\n",
    "print(all_C[max_idx], ': ', max(all_validation_accuracy))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nN9zAa6+9xtatW+tsz3P1o+ZYFW+eL3vvBc2qqqrIy8trsL/19buiooKnn37ap97QoUPp27cvOTk5\nDS4sNmjQIAYMGEBeXh6vvvoq48ePb/RqsM3FrlgY08a8V/ae36sHngTgvbL3iLsozu++Ldm2T3tx\ncYwYMYK1a9ciIrVugwCMHTuWRYsWMWbMGMaNG8c333xDbm4uiYmJfuf+1+R92yAiIoI5c+YwdepU\nLrvsMm677Ta++OILli9fTnx8vM9+1157LYWFhWRkZHDNNddQWlrKkiVLGDBggM84j6ioKBISEsjP\nzyc+Pp7u3buTlJTEeeedV6svycnJZGZmkpubi8vlIjU1lY8++oiVK1dy6623cumllwYTvjqlp6dz\nySWX8NBDD1FaWkpiYiIFBQU+4x8AunXrxogRI5g/fz4///wz0dHRrF+/nr1799a63TJ48GBUlenT\np3PLLbcQERHBjTfeyJgxY8jKyiItLY27776bo0ePsnTpUs4666wG118I5vgLFiygqKiIlJQU7rnn\nHhITEykvL2f16tV88skndOrUiaysLAoKCsjIyGDy5MkMGjQIl8vF2rVree655xgwYABJSUkMHTqU\nhx9+mO+++45u3bqRn58f1NLrKSkpdO3alQkTJnDfffdx8uRJVqxYUT3Y1yMsLIzc3FzS09O56KKL\nuOOOO+jduzc7duxg586dvP766z71J06cyLRp0xCRkC0Q16RCPc2kuTZsuqkxbVpubq6GhYXp8OHD\n66yzbNkyTUhI0MjISB04cKCuWLGi1lROVdU+ffrolClTql/7m0LoOWZ8fLxGRkbq8OHD9cMPP9TU\n1FS96qqrfOrNnTtX4+LitFOnTjpkyBBdv369TpgwQRMSEnzqFRcX65AhQ7Rjx44aFhZWPfV05syZ\n2r59e5+6J06c0NmzZ2t8fLx26NBB4+LidNasWbWmtvbp00czMjJqxSIlJaVWP/354YcfdOLEiXrG\nGWdojx49dPLkyVpSUlJruunXX3+tGRkZ2r17d+3Ro4eOHz9e9+/fr2FhYTpv3jyfNh977DGNiYnR\ndu3a+UzZLCws1KSkJI2MjNR+/fppTk6OLl26tM7pqd6COf7evXt10qRJ2qtXL42MjNT+/fvr/fff\nr1VVVdV1XC6XTp06VWNiYrRjx44aGxurd911lx4+fLi6TmlpqV555ZUaGRmp0dHRmp2drW+//bbf\n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\nc9gZwGQAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f59cbeadb38>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(all_C, all_training_accuracy, label='Training data accuracy', marker='x')\n",
    "plt.plot(all_C, all_validation_accuracy, label='Validation data accuracy', marker='x')\n",
    "plt.legend(loc='lower right', frameon=False)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Note: \n",
    "C~=40"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python [conda env:dsb2017]",
   "language": "python",
   "name": "conda-env-dsb2017-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
